微信开发笔记[0]:搭建开发测试环境
概况:
本地开发机
win7
,计算机名:FALCON-PC
,公司内网无法进行80端口映射.已安装nginx+php+mysql
外网测试机环境为
centos6.4
,主机名cpp65
。已安装nginx
使用域名
65.hihoku.com
进行开发测试,A记录已指向cpp65
搭建目标:
- 微信服务器能直接与本地开发机通讯,本地开发即时看到调试效果
原理和实现:
由于微信服务器不能直接访问内网的开发机,所以先让微信服务器访问外网测试主机,测试主机通过ssh隧道将请求转发至开发机,取得开发机响应的数据后,再返回给微信服务器。
SSH Forward 远程端口转发(
S2C
模式)+nginx反向代理
实施步骤:
Step1: @ win7
给nginx 增加一条配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | server { listen 80; server_name 65.hihoku.com; set $generater "wordpress"; #charset koi8-r; #access_log logs/host.access.log main; location / { root F:/kuaipan/hihoku/65.hihoku.com; index index.php index.html index.htm; try_files $uri $uri/ /index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { root F:/kuaipan/hihoku/65.hihoku.com; fastcgi_pass localhost:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param XGEN $generater; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } #server 65.hihoku.com end} |
在web根目录下
F:/kuaipan/hihoku/65.hihoku.com
,新建index.php
,写入内容:1 | <?php phpinfo();?> |
nginx -t
测试没有问题后 重启nginx
Step2: @win7
开发机设置 ssh forward
可以使用putty
,或者cygwin
、minGW
里的ssh命令,我机器上有minGW
,执行ssh -v
查看。
- 使用密钥 登陆 :
@ win7
1 | f:\>ssh root@cpp65 -i C:\Users\Administrator\ .ssh\id_rsa_cpp |
登录成功,密钥可用 。
进行 ssh forward
@win7
:
1 | C:\>ssh -C -N -g -R 7002:localhost:80 root@cpp65 -i C:\Users\Admini strator\.ssh\id_rsa_cpp |
这是整个过程中最不好理解的一个步骤,实际上可以看作一个变相的端口映射过程,即将本地的80端口通过ssh映射到远程cpp65
的7002端口。这里的localhost
指是cpp65
而不是本地的win7
,也可以修改为其他机器,比如cpp66
之类的,只要cpp65
能访问到。具体参数参考文章后面的附录
注意,此命令成功后没有任何提示。在
@cpp65
查看监听端口,可以看到7002
端口正在监听。
# netstat -tlnp | grep :7002
tcp 0 0 127.0.0.1:7002 0.0.0.0:* LISTEN 9016/sshd
tcp 0 0 ::1:7002 :::* LISTEN 9016/sshd
如果forward
失败,提示如下,请检查主机名和登录凭据。
Warning: remote port forwarding failed for listen port 7002
也可使用putty
连接,设置如下:
Step3: @cpp65
nginx配置反向代理:
最简单的配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
server{
listen 80;
server_name 65.hihoku.com;
access_log /hihoku/log/web/65.access.log;
location / {
proxy_pass http://127.0.0.1:7002;
include proxy.conf;
}
}
@cpp65
重启nginx, 此时再访问 http://65.hihoku.com 可以看到开发机的虚拟服务器了。
注意: 由于开发机配置了多个虚拟服务器, 如果
@cpp65
上直接 访问http://127.0.0.1:7002 可以看到开发机本地按 http://localhost 访问的结果,而非65.hihoku.com
。
Step4: 验证和接入
登录微信公众帐号平台,进入开发模式
。
下载php示例并解压,将php文件改名为wx.php
并放在开发机配置的web根目录下,本机为F:/kuaipan/hihoku/65.hihoku.com
将wx.php
的define("TOKEN", "weixin");
改为你自己的token。
填写接口配置:
token为你自己在
wx.php
中定义的 token
url为http://65.hihoku.com/wx.php,提交即可。
Step5: @win7
设置robots协议, 禁止蜘蛛抓取开发机域名下的内容
这是额外的步骤,防止因测试环境与生产环境内容重复破坏主站的SEO
nginx虚拟服务器配置加入以下内容:
if ($host ~ '^65.hihoku.com'){
rewrite ^/robots.txt$ /robots_deny.txt last;
}
根目录新建以下文件:robots_deny.txt
,写入内容:
User-agent:*
Disallow:/
重启nginx生效
ssh forward 相关参数的解释:
-f Fork into background after authentication.
后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-L port:host:hostport
将 本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这 个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转 发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-R port:host:hostport
将 远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一 旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口 的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-D port
指 定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上 有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充 当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
-C Enable compression.
压缩数据传输。
-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用。